﻿using System;
using CRC.GestionSalones.Dominio.Clases;
using Iesi.Collections.Generic;

namespace CRC.Incidencias.Dominio.Clases
{
    public class Incidencia
    {
        public Incidencia(){}

        public Incidencia(Salon pInspeccionado, Concepto pConceptoAfectado, AsignacionIncidencia pAsignadoA, DateTime? pFechaLimite, String pStrObservaciones) 
        {
            this.afectaA = pConceptoAfectado;
            this.asignadoA = pAsignadoA;
            this.fechaLimiteParaSolucion = pFechaLimite;
            this.strObservaciones = pStrObservaciones;
            this.bCerrada = false;
            pInspeccionado.añadirIncidencia(this);
        }

        private int intId;
        private Salon salon = null;
        private Concepto afectaA = null;
        private AsignacionIncidencia asignadoA = null;
        private DateTime? fechaLimiteParaSolucion = null;
        private String strObservaciones = String.Empty;
        private Boolean bCerrada;
        private ISet<Foto> fotos = new HashedSet<Foto>();

        public virtual int Id 
        {
            get { return this.intId; }
            set { this.intId = value; }
        }

        public virtual Salon Salon {
            get { return this.salon; }
            set { this.salon = value; }
        }

        public virtual Concepto AfectaA {
            get { return this.afectaA; }
            set { this.afectaA = value; }
        }

        public virtual AsignacionIncidencia AsignadoA 
        {
            get { return this.asignadoA; }
            set { this.asignadoA = value; }
        }

        public virtual DateTime? FechaLimiteParaSolucion 
        {
            get { return this.fechaLimiteParaSolucion; }
            set { fechaLimiteParaSolucion = value; }
        }

        public virtual String Observaciones 
        {
            get { return this.strObservaciones; }
            set { this.strObservaciones = value; }
        }

        public virtual Boolean Cerrada 
        {
            get { return this.bCerrada; }
            set { this.bCerrada = value; }
        }

        public virtual ISet<Foto> Fotos 
        {
            get { return this.fotos; }
            set { this.fotos = value; }
        }

        public virtual Boolean FueraDeTiempo()
        {
            return this.fechaLimiteParaSolucion.Value.CompareTo(DateTime.Today) > 1;
        }

        ///// <summary>
        ///// Crea una nueva foto para esta incidencia
        ///// </summary>
        ///// <param name="pStrArchivo">Ruta de la imagen</param>
        ///// <param name="pCategoria">Categoria de la imagen (categoria "Incidencias")</param>
        ///// <param name="pStrComentarios">Comentario sobre la foto</param>
        //public virtual Foto nuevaFoto(String pStrArchivo, Categoria pCategoria, String pStrComentarios)
        //{
        //    Foto f = new Foto(pStrArchivo, pCategoria, pStrComentarios, this.Salon);
        //    añadirFoto(f);
        //    return f;
        //}

        /// <summary>
        /// Añade la foto a la incidencia
        /// </summary>
        /// <param name="pFot">Foto a añadir</param>
        public virtual void añadirFoto(Foto pFot) 
        {
            Fotos.Add(pFot);
        }

    }
}
